﻿Функция ПроверитьПочту() Экспорт
	ЯщикIMAP = ПараметрыСеанса.ЯщикIMAP;
	Если ЯщикIMAP = "" Тогда
	    ЯщикIMAP = "INBOX";
	КонецЕсли;
    Возврат РаботаСПочтой.ПроверитьПисьма(Константы.ИспользоватьIMAP.Получить(), ЯщикIMAP);
КонецФункции

Функция ПолучитьПисьма(Количество, ИспользоватьIMAP, ПочтовыйЯщикIMAP) Экспорт
	Возврат РаботаСПочтой.ПолучитьПисьма(Количество, ИспользоватьIMAP, ПочтовыйЯщикIMAP);
КонецФункции

Процедура ПроверитьАдресаПолучателей(Получатели) Экспорт
	
	Для каждого Получатель из Получатели Цикл
		Получатель.СодержитОшибку = Не ЭлектронныйАдресКорректный(Получатель.ЭлектроннаяПочта);
	КонецЦикла;
	
КонецПроцедуры

Функция ЭлектронныйАдресКорректный(ЭлектроннаяПочта) Экспорт
	//RFC 5322 compliant regex
	РегулярноеВыражение = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|""(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])";
	Возврат СтрПодобнаПоРегулярномуВыражению(СокрЛП(ЭлектроннаяПочта), РегулярноеВыражение);
КонецФункции

Функция ПроверитьЭлектронныйАдрес(ЭлектроннаяПочта) Экспорт
	РезультатПроверки = ЭлектронныйАдресКорректный(ЭлектроннаяПочта);
	Если НЕ РезультатПроверки Тогда
		Сообщить("Введен некорректный адрес электронной почты: " + ЭлектроннаяПочта);
	КонецЕсли;
	Возврат РезультатПроверки;
КонецФункции

Функция ПолучитьАдресаЭлектроннойПочты(Текст) Экспорт

	ТекстЗапроса = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Получатели.ЭлектроннаяПочта КАК ЭлектроннаяПочта
	|ИЗ
	|	Справочник.ИсходящиеПисьма.Получатели КАК Получатели
	|ГДЕ
	|	Получатели.ЭлектроннаяПочта ПОДОБНО &ШаблонДляПоиска СПЕЦСИМВОЛ ""\""
	|	И НЕ Получатели.Ссылка.ПометкаУдаления
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Контрагенты.ЭлектроннаяПочта
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	Контрагенты.ЭлектроннаяПочта ПОДОБНО &ШаблонДляПоиска СПЕЦСИМВОЛ ""\""
	|	И Контрагенты.ЭлектроннаяПочта <> """"
	|	И НЕ Контрагенты.Ссылка.ПометкаУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	ЭлектроннаяПочта";
	
	ШаблонДляПоиска = Текст;
	ШаблонДляПоиска = СтрЗаменить(ШаблонДляПоиска, "\", "\\");
	ШаблонДляПоиска = СтрЗаменить(ШаблонДляПоиска, "%", "\%");
	ШаблонДляПоиска = СтрЗаменить(ШаблонДляПоиска, "_", "\_");
	ШаблонДляПоиска = ШаблонДляПоиска + "%";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("ШаблонДляПоиска", ШаблонДляПоиска);
	МассивЗначений = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);

	СписокЗначений = Новый СписокЗначений;
	СписокЗначений.ЗагрузитьЗначения(МассивЗначений);
	Возврат СписокЗначений;
	
КонецФункции
